<?php
/**
 * @Author: king
 * @Last Modified by:   king
 * Date: 2018/6/5
 * Time: 16:44
 */
namespace App\Tools;
use App\Tools\Aes;
use Cache;
/**
 * Iauth相关
 * Class IAuth
 */
class IAuth {
    /**
     * 设置密码
     * @param string $data
     * @return string
     */
    public static  function setPassword($data)
    {
        return md5($data.config('app.password_pre_halt'));
    }

    /**
     * 生成每次请求的sign
     * @param array $data
     * @return string
     */
    public static function setSign($data = [])
    {
        // 1 按字段排序
        ksort($data);
//        var_dump($data);
        // 2拼接字符串数据  &
        $string = http_build_query($data);
//        var_dump($string);
        // 3通过aes来加密
        $string = (new Aes())->encryptWithOpenssl($string);

        return $string;
    }

    /**
     * 检查sign是否正常
     * @param array $data
     * @return boolean
     */
    public static function checkSignPass($data = [])
    {
       
        $str = (new Aes())->decryptWithOpenssl($data['sign']);
        if(empty($str)) return false;
     
        parse_str($str, $arr);

        if(
            !is_array($arr) || !isset($arr['did']) || $arr['did'] != $data['did']
            || !isset($arr['version']) || $arr['version'] != $data['version']
        )
        {
           return false;
        }
        
    /*if(!config('app.debug'))
        {

            if(strtolower($arr['app-type']) === 'ios') $time = $arr['time'];
            else $time = ceil($arr['time'] / 1000);
            $valid = intval(config('app.app_sign_time'));
            // 判断当前签名sign是否已过期
            if ((time() - $time) > $valid)
            {
                return false;
            }


            // 唯一性判定 当前签名只能使用一次 Redis存储中获取
           
           // if (Cache::get($data['sign'])) return false;
        }*/
        return true;
    }

    /**
     * 设置登录的token  - 唯一性的
     * @param string $tel
     * @return string
     */
    public  static function setAppLoginToken($tel = '')
    {
        $str = md5(uniqid(md5(microtime(true)), true));
        $str = sha1($str.$tel);
        return $str;
    }

}